In DOS memory management, expanded memory is a system of bank switching that provided additional memory to DOS programs beyond the limit of conventional memory (640 KiB).
Expanded memory is an umbrella term for several incompatible technology variants. The most widely used variant was the Expanded Memory Specification ( EMS), which was developed jointly by Lotus Software, Intel, and Microsoft, so that this specification was sometimes referred to as " LIM EMS". LIM EMS had three versions: 3.0, 3.2, and 4.0. The first widely implemented version was EMS 3.2, which supported up to 8 MiB of expanded memory and uses parts of the address space normally dedicated to communication with peripherals (upper memory) to map portions of the expanded memory. EEMS, an expanded-memory management standard competing with LIM EMS 3.x, was developed by AST Research, Quadram and Ashton-Tate ("AQA"); it could map any area of the lower 1 MiB. EEMS ultimately was incorporated in LIM EMS 4.0, which supported up to 32 MiB of expanded memory and provided some support for DOS multitasking as well. IBM, however, created its own expanded-memory standard called XMA.
The use of expanded memory became common with games and business programs such as Lotus 1-2-3 in the late 1980s through the mid-1990s, but its use declined as users switched from DOS to protected-mode operating systems such as Linux, IBM OS/2, and Microsoft Windows.
Even though the IBM PC AT, introduced in 1984, uses the 80286 chip that can address up to 16 MiB of RAM as extended memory, it can only do so in protected mode. The scarcity of software compatible with protected mode (no standard DOS applications can run in it) meant that the market was still open for another solution.
To make more memory accessible, a bank switching scheme was devised, where only selected parts of the additional memory is accessible at any given time. Originally, a single 64 KiB (216 bytes) window of memory, called a page frame, was used; later this was made more flexible. Programs are written in a specific way to access expanded memory. The window between conventional memory and expanded memory can be adjusted to access different locations within the expanded memory.
A first attempt to use a bank switching technique was made by Tall Tree Systems with its JRAM boards, but these did not catch on. (Tall Tree Systems later made EMS-based boards using the same JRAM brand.)
Microsoft thought that bank switching was an inelegant and temporary, but necessary stopgap measure. Slamming his fist on the table during an interview Bill Gates said of expanded memory, "It's garbage! It's a kludge! … But we're going to do it". The companies planned to launch the standard at the Spring 1985 COMDEX, with many expansion-card and software companies announcing their support. AST Research, STB Systems, Persyst, Quadram, and Tecmar quickly designed EMS-compliant cards to compete with Intel's own Above Board expansion card. By mid-1985 some already called EMS a de facto standard.
The first public version of the EMS standard, called EMS 3.0 was released in 1985; EMS 3.0, however, saw almost no hardware implementations before being superseded by EMS 3.2. EMS 3.2 uses a 64 KiB region in the upper 384 KiB (upper memory area) divided into four 16 KiB pages, which can be used to map portions of the expanded memory.
Quadram, AST, and Ashton-Tate created the Enhanced EMS (EEMS) standard. EEMS, a superset of EMS 3.2, allows any 16 KiB region in lower RAM to be mapped to expanded memory, as long as it was not associated with interrupts or dedicated I/O memory such as network or video cards. Thus, entire programs can be switched in and out of the extra RAM. EEMS also added support for two sets of mapping registers. These features are used by early DOS multitasker software such as DESQview. 1987's LIM EMS 4.0 specification incorporated practically all features of EEMS.
A new feature added in LIM EMS 4.0 was that EMS boards can have multiple sets of page-mapping registers (up to 64 sets). This allows a primitive form of DOS multitasking. The caveat is, however, that the standard does not specify how many register sets a board should have, so there is great variability between hardware implementations in this respect.
The Expanded Memory Specification (EMS) is the specification describing the use of expanded memory. EMS functions are accessible through software interrupt 67h. Programs using EMS must first establish the presence of an installed expanded memory manager (EMM) by checking for a device driver with the device name EMMXXXX0.
The first software expanded-memory management (emulation) program was CEMM, available in September 1986 as a utility for the Compaq Deskpro 386. A popular and well-featured commercial solution was Quarterdeck's QEMM. A contender was Qualitas' 386MAX. Functionality was later incorporated into MS-DOS 4.01 in 1989 and into DR DOS 5.0 in 1990, as EMM386.
Software expanded-memory managers in general offered additional, but closely related functionality. Notably, they allowed using parts of the upper memory area (UMA) (the upper 384 KiB of real-mode address space) called upper memory blocks (UMBs) and provided tools for loading small programs, typically terminate-and-stay-resident programs inside ("LOADHI" or "LOADHIGH").
Interaction between extended memory, expanded-memory emulation and DOS extenders ended up being regulated by the XMS, Virtual Control Program Interface (VCPI), DOS Protected Mode Interface (DPMI) and DOS Protected Mode Services (DPMS) specifications.
Certain emulation programs, colloquially known as LIMulators, did not rely on motherboard or 80386 features at all. Instead, they reserved 64 KiB of the base RAM for the expanded memory window, where they copied data to and from either extended memory or the hard disk when application programs requested page switches. This was programmatically easy to implement, but performance was low. This technique was offered by AboveDisk from Above Software and by several shareware programs.
It is also possible to emulate EMS by using XMS memory on 286 CPUs using 3rd party utilities like EMM286 (.SYS driver).
|
|